Barcodes have widespread applications. For example, barcodes can be used to identify a class of objects (e.g., merchandise) or unique items (e.g., patents). As a result, barcodes are found on a wide variety of objects, such as goods, company assets, and documents, and help track production at manufacturing facilities and inventory at stores (by scanning items as they arrive and as they are sold).
A barcode essentially is a machine-readable representation of information in a visual format on a surface of the object—i.e., an optical code. Some barcodes use a dark ink on a white substrate to create high and low reflectance upon scanning. Based on the symbology being used (e.g., UPC, Code 39, Code 128, PDF417, etc.), a barcode may comprise data characters (or codewords in the case of, e.g., PDF417) and/or overhead characters represented by a particular sequence of bars and spaces (which may have varying widths).
Typically barcodes contain data characters including a single group of bars and spaces that represent the encoded numbers, letters, punctuation marks, or other symbols. In other words, the data characters are the smallest subset of bars and spaces that contain data. In certain symbologies, the data characters may represent more than one number, letter, etc. For example, Code 128 is capable of encoding two numbers into one character width (double density). The overhead characters include a group of bars and spaces that represent, e.g., start characters, stop characters, center characters, guard characters, and/or check characters. For example, a pair of guard characters may delimit the beginning and end of a barcode and a center character may separate the barcode into two halves. A check character may serve as a redundancy check used for error detection (similar to a binary checksum). For example, the check character could be computed from the other characters in the barcode.
Optical code readers are used to optically capture barcode patterns or other symbols or information imprinted on various surfaces in order to transmit the information encoded in the barcode pattern or symbol to a host processing device. Two types of commonly used optical code readers are flying spot scanners and imaging based scanners. Flying spot laser scanners generally obtain barcode information by sweeping a laser spot across the barcode. The laser spot may be generated from a light source inside an oscillating reflecting surface, typically a mirror. The light reflected from the barcode is collected by a photosensor, which outputs an analog waveform representing the relative spacing of the bars in the barcode. The analog signal may then be digitized and decoded into data representing the information encoded in the barcode.
Imaging based scanners include solid state image circuitry, such as charge coupled devices (CCDs), and may be implemented using a one-dimensional or two-dimensional imaging array of photosensors (or pixels) to capture the barcode. One-dimensional CCD readers capture a linear cross section of the barcode at once, producing an analog waveform whose amplitude represents the relative darkness and lightness of the barcode. Two-dimensional CCD readers capture an entire two-dimensional image at once. Generally only select portions of the image data are stored and processed. The select portions of the image data are sometimes referred to as virtual scan lines because the select portions are analogous to a signal generated by reflection of a moving laser beam spot scanning across the barcode.
The effectiveness of an imaging system employing virtual scan lines may be limited by how accurately edge transitions (that signify the bars and spaces) are identified by the edge detector. For example, based on limitations in edge detection parameters edge transitions may be missed or erroneous edge transitions may be identified, which may ultimately require the barcode to be rescanned. Accordingly, the present inventor has identified a need for enhanced virtual scan line processing for decoding barcodes that avoids the need to rescan the barcode.